/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package laboratorio2;

/*
 * Fecha: 17 de julio del 2013
 * Nombre Archivo: DriverCandado.java
 * Descripcion: Esta clase es el que interactua con el usuario y pasa los datos a las demas clases.
 */

/**INTEGRANTES:
 * Royer Diaz, 
 *Marcos Giovanni Lopez,
 *Juan de Dios Chivalan, 12175
 */
import java.util.Scanner;
public class DriverCandado {
    public static void main(String[] args)//clase principal que corre todo el programa.
    {
        Scanner opciones= new Scanner(System.in);
        int opcion,opcion2,opcion3,clave;
             System.out.println("////////////Bienvenidos al CANDADO//////////////////");
             System.out.println("1.Candado Yale");
             System.out.println("2.Candado ACE");
             opcion=opciones.nextInt();//lectura de dato ingresado.
           switch(opcion)//condision para verificar cada entrada.
         {
             case 1://suponiendo que elige que puede trabajar con yale se utiliza la clase lock1.
                    System.out.println("////////////Bienvenidos al Yale//////////////////");
                    System.out.println("1.Candado Clave estandar (9-0-21-0)");
                    System.out.println("2.Candado al gusto del usuario");
                    opcion2=opciones.nextInt();//lectura de dato ingresado.
                    switch(opcion2)
                    {
                        case 1:
                               do
                                {
                                    Lock1 yale= new Lock1();
                                    System.out.println("////////////MENU//////////////////");
                                    System.out.println("1.Abrir candado");//al abrir el candado automaticamente resetea los numeros que el usuario ingresa.
                                    System.out.println("2.Nuevo intento");//resetea para poder hacer 
                                    System.out.println("3.Estado del candado");//resetea para poder hacer 
                                    System.out.println("4.Resetear todo el candado");//resetea para poder hacer 
                                    System.out.println("5.Salir");//resetea para poder hacer 
                                    opcion3=opciones.nextInt();//lectura de dato ingresado.
                                    switch(opcion3)
                                    {
                                        case 1://abrir candado.
                                            String resultado;//variable para imprimir en pantalla.
                                            int largo=yale.getLargo();//variable para controlar el largo de la clave.
                                            int [] ingreso= new int[yale.getLargo()];//listado que contendra la clave que el usurio ingresa.
                                            System.out.println("Ingrese la clave para abrir el candado:");//mensaje en pantalla 
                                            for(int i=0;i<largo;i++)//ciclo para controlar el listado de la clave.
                                            {
                                                System.out.println("No :"+(i+1));
                                                clave=opciones.nextInt();
                                                ingreso[i]=clave;
                                            }
                                            resultado=yale.press(ingreso);//para verificar si se habre el candado
                                            System.out.println(resultado);//imprimir el resulatdo en pantalla 
                                            break;
                                        case 2://Nuebo intento.
                                            String resultado1;
                                            resultado1=yale.reset();// el usuario puede reingresar su clave.
                                            System.out.println(resultado1);//imprimir el resulatdo en pantalla 
                                            break;
                                        case 3://Estado del candado.
                                            String resultado2;
                                            resultado2=yale.isLocked();//metodo para ver el estado del candado.
                                            System.out.println(resultado2);//imprimir el resulatdo en pantalla 
                                            break;
                                        case 4://Resetear candado total.
                                            yale.lock();// cierra y re inicia el candado.
                                            System.out.println("Su candado ya fue reseteado!");//imprimir el resulatdo en pantalla 
                                            opcion3=5;//reinicia el candado.
                                            break;
                                        default://controla el error.
                                            System.out.println("Revise bien sus opciones puede que no este escogiendo bien.");//imprimir el resulatdo en pantalla 
                                    }

                                }while(opcion3==5);
                            break;
                        case 2:
                            System.out.println("Ingrese el largo del candado:");//imprimir el resulatdo en pantalla 
                            int largoo=opciones.nextInt();//variable para conocer el largo de la cadena o lista
                            Lock1 yale= new Lock1(largoo);//se crea el candado 
                            int [] ingreso= new int[largoo];//ciclo para controlar la cadena o lista
                            for(int i=0;i<largoo;i++)
                            {
                              System.out.println("No :"+(i+1));//imprimir el resulatdo en pantalla 
                              clave=opciones.nextInt();
                              ingreso[i]=clave;
                            }
                            yale.ingresoClave(ingreso);//se le carga a memoria el la clave que el usuario ingresos.
                            do
                                {
                                    System.out.println("////////////MENU//////////////////");//imprimir el resulatdo en pantalla 
                                    System.out.println("1.Abrir candado");//al abrir el candado automaticamente resetea los numeros que el usuario ingresa.
                                    System.out.println("2.Nuevo intento");//resetea para poder hacer 
                                    System.out.println("3.Estado del candado");//resetea para poder hacer 
                                    System.out.println("4.Resetear todo el candado");//resetea para poder hacer 
                                    System.out.println("5.Salir");//resetea para poder hacer 
                                    opcion3=opciones.nextInt();//lectura de dato ingresado.
                                    switch(opcion3)
                                    {
                                        case 1://abrir candado.
                                            String resultado;//variable para imprimir en pantalla.
                                            int largo=yale.getLargo();
                                            System.out.println("Ingrese la clave para abrir el candado:");//imprimir el resulatdo en pantalla 
                                            for(int i=0;i<largo;i++)
                                            {
                                                System.out.println("No :"+(i+1));
                                                clave=opciones.nextInt();
                                                ingreso[i]=clave;
                                            }
                                            resultado=yale.press(ingreso);
                                            System.out.println(resultado);//imprimir el resulatdo en pantalla 
                                            break;
                                        case 2://Nuebo intento.
                                            String resultado1;
                                            resultado1=yale.reset();
                                            System.out.println(resultado1);//imprimir el resulatdo en pantalla 
                                            break;
                                        case 3://Estado del candado.
                                            String resultado2;
                                            resultado2=yale.isLocked();
                                            System.out.println(resultado2);//imprimir el resulatdo en pantalla 
                                            break;
                                        case 4://Resetear candado total.
                                            yale.lock();
                                            System.out.println("Su candado ya fue reseteado!");//imprimir el resulatdo en pantalla 
                                            opcion3=5;
                                            break;
                                        default:
                                            System.out.println("Revise bien sus opciones puede que no este escogiendo bien.");//imprimir el resulatdo en pantalla 
                                    }

                                }while(opcion3==5);
                            break;
                        default:
                            System.out.println("Revise bien sus opciones puede que no este escogiendo bien.");
                    }   
                 break;
             case 2:
                 //suponiendo que elige que puede trabajar con yale se utiliza la clase lock1.
                    System.out.println("////////////Bienvenidos al ACE//////////////////");
                    System.out.println("1.Candado Clave estandar (9-0-21-0)");
                    System.out.println("2.Candado al gusto del usuario");
                    opcion2=opciones.nextInt();//lectura de dato ingresado.
                    switch(opcion2)
                    {
                        case 1:
                               do
                                {
                                    Lock2 ace= new Lock2();
                                    System.out.println("////////////MENU//////////////////");
                                    System.out.println("1.Abrir candado");//al abrir el candado automaticamente resetea los numeros que el usuario ingresa.
                                    System.out.println("2.Nuevo intento");//resetea para poder hacer 
                                    System.out.println("3.Estado del candado");//resetea para poder hacer 
                                    System.out.println("4.Resetear todo el candado");//resetea para poder hacer 
                                    System.out.println("5.Salir");//resetea para poder hacer 
                                    opcion3=opciones.nextInt();//lectura de dato ingresado.
                                    switch(opcion3)
                                    {
                                        case 1://abrir candado.
                                            String resultado;//variable para imprimir en pantalla.
                                            int largo=ace.getLargo();//variable para controlar el largo de la clave.
                                            int [] ingreso= new int[ace.getLargo()];//listado que contendra la clave que el usurio ingresa.
                                            System.out.println("Ingrese la clave para abrir el candado:");//mensaje en pantalla 
                                            for(int i=0;i<largo;i++)//ciclo para controlar el listado de la clave.
                                            {
                                                System.out.println("No :"+(i+1));
                                                clave=opciones.nextInt();
                                                ingreso[i]=clave;
                                            }
                                            resultado=ace.press(ingreso);//para verificar si se habre el candado
                                            System.out.println(resultado);//imprimir el resulatdo en pantalla 
                                            break;
                                        case 2://Nuebo intento.
                                            String resultado1;
                                            resultado1=ace.reset();// el usuario puede reingresar su clave.
                                            System.out.println(resultado1);//imprimir el resulatdo en pantalla 
                                            break;
                                        case 3://Estado del candado.
                                            String resultado2;
                                            resultado2=ace.isLocked();//metodo para ver el estado del candado.
                                            System.out.println(resultado2);//imprimir el resulatdo en pantalla 
                                            break;
                                        case 4://Resetear candado total.
                                            ace.lock();// cierra y re inicia el candado.
                                            System.out.println("Su candado ya fue reseteado!");//imprimir el resulatdo en pantalla 
                                            opcion3=5;//reinicia el candado.
                                            break;
                                        default://controla el error.
                                            System.out.println("Revise bien sus opciones puede que no este escogiendo bien.");//imprimir el resulatdo en pantalla 
                                    }

                                }while(opcion3==5);
                            break;
                        case 2:
                            System.out.println("Ingrese el largo del candado:");//imprimir el resulatdo en pantalla 
                            int largoo=opciones.nextInt();//variable para conocer el largo de la cadena o lista
                            Lock2 ace= new Lock2(largoo);//se crea el candado 
                            int [] ingreso= new int[largoo];//ciclo para controlar la cadena o lista
                            for(int i=0;i<largoo;i++)
                            {
                              System.out.println("No :"+(i+1));//imprimir el resulatdo en pantalla 
                              clave=opciones.nextInt();
                              ingreso[i]=clave;
                            }
                            ace.ingresoClave(ingreso);//se le carga a memoria el la clave que el usuario ingresos.
                            do
                                {
                                    System.out.println("////////////MENU//////////////////");//imprimir el resulatdo en pantalla 
                                    System.out.println("1.Abrir candado");//al abrir el candado automaticamente resetea los numeros que el usuario ingresa.
                                    System.out.println("2.Nuevo intento");//resetea para poder hacer 
                                    System.out.println("3.Estado del candado");//resetea para poder hacer 
                                    System.out.println("4.Resetear todo el candado");//resetea para poder hacer 
                                    System.out.println("5.Salir");//resetea para poder hacer 
                                    opcion3=opciones.nextInt();//lectura de dato ingresado.
                                    switch(opcion3)
                                    {
                                        case 1://abrir candado.
                                            String resultado;//variable para imprimir en pantalla.
                                            int largo=ace.getLargo();
                                            System.out.println("Ingrese la clave para abrir el candado:");//imprimir el resulatdo en pantalla 
                                            for(int i=0;i<largo;i++)
                                            {
                                                System.out.println("No :"+(i+1));
                                                clave=opciones.nextInt();
                                                ingreso[i]=clave;
                                            }
                                            resultado=ace.press(ingreso);
                                            System.out.println(resultado);//imprimir el resulatdo en pantalla 
                                            break;
                                        case 2://Nuebo intento.
                                            String resultado1;
                                            resultado1=ace.reset();
                                            System.out.println(resultado1);//imprimir el resulatdo en pantalla 
                                            break;
                                        case 3://Estado del candado.
                                            String resultado2;
                                            resultado2=ace.isLocked();
                                            System.out.println(resultado2);//imprimir el resulatdo en pantalla 
                                            break;
                                        case 4://Resetear candado total.
                                            ace.lock();
                                            System.out.println("Su candado ya fue reseteado!");//imprimir el resulatdo en pantalla 
                                            opcion3=5;
                                            break;
                                        default:
                                            System.out.println("Revise bien sus opciones puede que no este escogiendo bien.");//imprimir el resulatdo en pantalla 
                                    }

                                }while(opcion3==5);
                            break;
                        default:
                            System.out.println("Revise bien sus opciones puede que no este escogiendo bien.");
                    }
                   break;
             default:
                 System.out.println("Revise bien sus opciones puede que no este escogiendo bien o termino el programa gracias.");
         }
        
    }
    
}

